{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "与会人员一致认为，宣讲内容丰富、深入浅出，既有理论上的概括，又有实践上的指导，对深入学习贯彻党的二十届三中全会精神具有十分重要的指导意义。\n",
      "围绕深入学习贯彻党的二十届三中全会精神，结合宣讲报告，孙永壮强调，深入学习贯彻党的二十届三中全会精神，是当前和今后一个时期的重大政治任务，要原原本本学，深入探讨交流，确保学深悟透。要融会贯通学，把党的二十届三中全会精神与习近平总书记视察胜利油田、九江石化重要指示精神结合起来，一体学习、一体把握、一体落实。要联系实际学，扎实推动党的二十届三中全会精神走深走实、落地见效。\n",
      "学习宣传贯彻党的二十届三中全会精神，关键看行动，根本在落实。孙永壮要求，要把学习贯彻党的二十届三中全会精神与主题行动结合起来，与持续实施“6335”发展战略、重点推进“1337”系统工程结合起来，切实把学习成效转化为推动油田高质量发展的新思路、新方法、新举措，扎实推动党的二十届三中全会精神在油田落实落地。\n",
      "走出会场，意犹未尽。通过收听宣讲，集团公司高级专家，油田企管法规部经理马清彪更加深刻地领会了党的二十届三中全会的重大意义、丰富内涵、精神实质。“要把改革管理摆在更加突出位置，聚焦增强核心功能、提升核心竞争力，做强产业链，赋能创新链，提升价值链，打通资源链，扎实推进精细管理、精益管理，全面增强能源保供、科技支撑、资源创效和绿色发展能力。”马清彪表示。\n",
      "宣讲前，袁红英先后到油田勘探开发研究院和科技展览中心等地开展现场调研，深入了解油田60多年的改革发展历程和科技创新情况，向油田基层干部员工宣讲交流党的二十届三中全会精神。\n",
      "宣讲报告会以视频形式举行。油田和胜利石油工程公司各直属单位党委理论学习中心组成员和部分基层骨干、党员代表等，约4000人在各分会场同步收看。\n"
     ]
    }
   ],
   "source": [
    "### 使用批判性思维标注文档 ###\n",
    "from docx import Document #pip install python-docx\n",
    "\n",
    "# 第一步：遍例文档，读取段落paragraphs #\n",
    "def read_docx_paragraphs(file_path):\n",
    "    document = Document(file_path)\n",
    "    paragraphs = []\n",
    "    # 遍历文档中的所有段落\n",
    "    for para in document.paragraphs:\n",
    "        if para.text != \"\":     # 去掉空行\n",
    "            paragraphs.append(para.text)\n",
    "           # print(para.text)\n",
    "    return paragraphs\n",
    "\n",
    "file_path = 'Data/双碳文档.docx'\n",
    "para = read_docx_paragraphs(file_path)\n",
    "print('\\n'.join(para[4:20]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['ID_001: 省委宣讲团来油田宣讲党的二十届三中全会精神',\n",
       " 'ID_002: 根据山东省委统一部署，8月20日，学习贯彻党的二十届三中全会精神省委宣讲团到油田宣讲，山东省委宣讲团成员，山东社会科学院党委书记、院长袁红英作党的二十届三中全会精神专题宣讲报告。集团公司总经理助理兼管理局有限公司执行董事、党委书记，油田分公司代表孙永壮主持宣讲报告会。',\n",
       " 'ID_003: 油田领导杨勇（总经理）、魏永军，中石化石油工程造价管理中心主任尚朝辉在主会场参加宣讲报告会。胜利石油工程公司领导舒华文、程新建、葛磊、李兵在工程公司分会场参加宣讲报告会。',\n",
       " 'ID_004: 袁红英围绕党的二十届三中全会主题，以《在进一步全面深化改革上当好排头兵》为题，从深刻把握《中共中央关于进一步全面深化改革、推进中国式现代化的决定》精神，全面准确理解《决定》提出的重大举措，在进一步全面深化改革上当好排头兵，全力以赴抓好全会精神贯彻落实等方面，进行了深刻阐释和全面解读。',\n",
       " 'ID_005: 与会人员一致认为，宣讲内容丰富、深入浅出，既有理论上的概括，又有实践上的指导，对深入学习贯彻党的二十届三中全会精神具有十分重要的指导意义。',\n",
       " 'ID_006: 围绕深入学习贯彻党的二十届三中全会精神，结合宣讲报告，孙永壮强调，深入学习贯彻党的二十届三中全会精神，是当前和今后一个时期的重大政治任务，要原原本本学，深入探讨交流，确保学深悟透。要融会贯通学，把党的二十届三中全会精神与习近平总书记视察胜利油田、九江石化重要指示精神结合起来，一体学习、一体把握、一体落实。要联系实际学，扎实推动党的二十届三中全会精神走深走实、落地见效。',\n",
       " 'ID_007: 学习宣传贯彻党的二十届三中全会精神，关键看行动，根本在落实。孙永壮要求，要把学习贯彻党的二十届三中全会精神与主题行动结合起来，与持续实施“6335”发展战略、重点推进“1337”系统工程结合起来，切实把学习成效转化为推动油田高质量发展的新思路、新方法、新举措，扎实推动党的二十届三中全会精神在油田落实落地。',\n",
       " 'ID_008: 走出会场，意犹未尽。通过收听宣讲，集团公司高级专家，油田企管法规部经理马清彪更加深刻地领会了党的二十届三中全会的重大意义、丰富内涵、精神实质。“要把改革管理摆在更加突出位置，聚焦增强核心功能、提升核心竞争力，做强产业链，赋能创新链，提升价值链，打通资源链，扎实推进精细管理、精益管理，全面增强能源保供、科技支撑、资源创效和绿色发展能力。”马清彪表示。',\n",
       " 'ID_009: 宣讲前，袁红英先后到油田勘探开发研究院和科技展览中心等地开展现场调研，深入了解油田60多年的改革发展历程和科技创新情况，向油田基层干部员工宣讲交流党的二十届三中全会精神。',\n",
       " 'ID_010: 宣讲报告会以视频形式举行。油田和胜利石油工程公司各直属单位党委理论学习中心组成员和部分基层骨干、党员代表等，约4000人在各分会场同步收看。']"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 第二步：把paragraphs格式化为ID_001: <text>的格式\n",
    "def paragraphs_with_id(para):\n",
    "    \"\"\"\n",
    "    加工一个字符串数组para，使得每个字符串前面都带有递增的ID前缀。\n",
    " \n",
    "    函数内部逻辑:\n",
    "    - 使用enumerate从1开始为数组元素生成索引。\n",
    "    - 使用格式化字符串生成ID前缀，确保ID是三位数字，如\"001\"。\n",
    "    \"\"\"\n",
    "    formatted_paras = []\n",
    "    for index, text in enumerate(para, start=1):\n",
    "        # 生成格式化的ID前缀，例如\"ID_001\"\n",
    "        formatted_id = f\"ID_{index:03d}\"\n",
    "        # 打印带有ID前缀的字符串\n",
    "        formatted_paras.append(f\"{formatted_id}: {text}\")\n",
    "    return formatted_paras\n",
    "\n",
    "# 测试用例\n",
    "paragraphs_with_id(para[:20])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "```json\n",
      "{\n",
      "    \"paragraphs\": [\n",
      "        {\n",
      "            \"id\": \"ID_001\",\n",
      "            \"content\": \"省委宣讲团来油田宣讲党的二十届三中全会精神\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，提及的具体时间、组织者以及活动的直接目的（宣讲党的政策），这些信息都有明确依据和证据支撑。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_002\",\n",
      "            \"content\": \"根据山东省委统一部署，8月20日，学习贯彻党的二十届三中全会精神省委宣讲团到油田宣讲\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，提供了活动的日期和背后的官方指导，以及宣讲主题的信息，这些信息均基于确切的时间、行动单位和目的。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_003\",\n",
      "            \"content\": \"油田领导杨勇（总经理）、魏永军，中石化石油工程造价管理中心主任尚朝辉在主会场参加宣讲报告会。胜利石油工程公司领导舒华文、程新建、葛磊、李兵在工程公司分会场参加宣讲报告会\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，列出了参会的人员和会场设置，这些信息基于特定的角色和活动安排。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_004\",\n",
      "            \"content\": \"袁红英围绕党的二十届三中全会主题，以《在进一步全面深化改革上当好排头兵》为题，从深刻把握《中共中央关于进一步全面深化改革、推进中国式现代化的决定》精神等方面进行深入阐述\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个基于证据的事实陈述，描述了宣讲的内容重点和主题与中共中央重要文件的联系。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_005\",\n",
      "            \"content\": \"与会人员一致认为，宣讲内容丰富、深入浅出，对深入学习贯彻党的二十届三中全会精神具有十分重要的指导意义\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Opinion\",\n",
      "                \"explanation\": \"这是一个观点陈述，基于参会者的意见和感受，表示宣讲的评价正面。这部分没有具体的客观证据支撑。”\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_006\",\n",
      "            \"content\": \"围绕深入学习贯彻党的二十届三中全会精神，孙永壮强调要点\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，描述了特定的指导和强调内容，基于活动的组织者的话语。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_007\",\n",
      "            \"content\": \"学习宣传贯彻党的二十届三中全会精神，关键看行动，根本在落实\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，明确指出了执行与落实的重要性。“关键”和“根本”的描述更侧重于强调概念，而不是直接证据。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_008\",\n",
      "            \"content\": \"通过收听宣讲，集团公司高级专家马清彪更加深刻地领会了党的二十届三中全会的精神\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，描述了一个特定个人（高阶专家）在收听后的反应和感受。这个信息基于他的个人经历。”\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_009\",\n",
      "            \"content\": \"宣讲前，袁红英先后到油田勘探开发研究院等地开展现场调研\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，描述了活动安排中的具体行动，与实地考察和信息交流有关。\"\n",
      "            }\n",
      "        },\n",
      "        {\n",
      "            \"id\": \"ID_010\",\n",
      "            \"content\": \"宣讲报告会以视频形式举行\",\n",
      "            \"classification\": {\n",
      "                \"type\": \"Fact\",\n",
      "                \"Evidence-Based\": true,\n",
      "                \"explanation\": \"这是一个事实陈述，描述了会议的呈现形式和参与人群。\"\n",
      "            }\n",
      "        }\n",
      "    ]\n",
      "}\n",
      "```\n"
     ]
    }
   ],
   "source": [
    "# 第三步：让大模型分块，找出从哪块分割其对应的ID_XXX\n",
    "from openai import OpenAI\n",
    "import json\n",
    "\n",
    "client = OpenAI(\n",
    "    api_key=\"ollama\",\n",
    "    base_url=\"http://192.168.20.43:11434/v1\"\n",
    ")\n",
    "\n",
    "def llm_chunking_prompt(chunks):\n",
    "    output = {\n",
    "        \"paragraphs\": [\n",
    "            {\n",
    "                \"id\": \"ID_001\",\n",
    "                \"content\": \"第一段的具体内容。\",\n",
    "                \"classification\": {\n",
    "                    \"type\": \"Fact\",\n",
    "                    \"Evidence-Based\": False,\n",
    "                    \"explanation\": \"为什么这段是事实无证据支撑的简短理由。\"\n",
    "                }\n",
    "            },\n",
    "            {\n",
    "                \"id\": \"ID_002\",\n",
    "                \"content\": \"第二段的具体内容。\",\n",
    "                \"classification\": {\n",
    "                    \"type\": \"Opinion\",\n",
    "                    \"explanation\": \"为什么这段是观点的简短理由。\"\n",
    "                }\n",
    "            },\n",
    "            {\n",
    "                \"id\": \"ID_003\",\n",
    "                \"content\": \"第三段的具体内容。\",\n",
    "                \"classification\": {\n",
    "                    \"type\": \"Fact\",\n",
    "                    \"Evidence-Based\": True,\n",
    "                    \"explanation\": \"为什么这段是有实据支撑的简短理由。\"\n",
    "                }\n",
    "            },\n",
    "        ]\n",
    "    }\n",
    "    # 假设data是上面定义的字典\n",
    "    string_from_output_json = json.dumps(output, ensure_ascii=False, indent=4)\n",
    "    \n",
    "    prompt = f\"\"\"\\\n",
    "    ---------------------\\\n",
    "    # PROMPT #\\\n",
    "    You will receive as input an document with paragraphs identified by 'ID_XXX:<test>'\\\n",
    "    ---------------------\\\n",
    "    # TASK #\\\n",
    "    - 请区分every paragraphs陈述的内容是事实还是观点\\\n",
    "    - 区分事实是否有证据或逻辑支撑\n",
    "    ---------------------\\\n",
    "    # OUTPUT #\\\n",
    "    请按照下述Json格式提供你的分析结果。\n",
    "    {string_from_output_json}\n",
    "    ---------------------\\\n",
    "    # Background Knowledge #\\\n",
    "    我们可以将区分事实Fact和观点的结论更为精准地总结如下：\\\n",
    "    - 基于证据：事实是基于可验证的证据，而观点通常不依赖于证据，而是基于个人的信念或偏好。\\\n",
    "    - 客观性：事实是客观存在的，不带有个人情感色彩，而观点则是主观的，受个人情感和价值观的影响。\\\n",
    "    - 一致性与普遍性：事实对于所有观察者来说应该是一致的，无论时间或地点如何变化，而观点则可能因人而异，不具备普遍性。\\\n",
    "    - 可重复性：事实是可以被重复验证的，即不同的人使用相同的方法应该能够得出相同的结论，而观点则不能被重复验证。\\\n",
    "    - 语言特征：事实的表述通常使用中性、描述性的语言，避免使用评价性或情感性词汇；观点则可能使用评价性词汇，表达个人态度或情感。\\\n",
    "    - 目的性：事实的目的是为了提供信息和知识，而观点的目的是为了表达个人的看法、偏好或情感。\\\n",
    "    - 逻辑结构：事实的陈述通常遵循逻辑和理性的结构，而观点可能包含非逻辑的跳跃或情感上的诉求。\\\n",
    "    - 可证伪性：事实是可以被证伪的，即存在可能的证据能够证明其错误，而观点由于其主观性，通常不具备可证伪性。\\\n",
    "        \n",
    "    ---------------------\\\n",
    "    \"\"\"\n",
    "    chunks_with_id = paragraphs_with_id(chunks)\n",
    "    # 在每个段落后面添加换行符，并创建一个新的列表\n",
    "    new_chunks_with_id = [chunk + '\\n' for chunk in chunks_with_id]\n",
    "\n",
    "    # 使用 join 方法将新列表中的元素连接成一个单一的字符串\n",
    "    query = ''.join(new_chunks_with_id)\n",
    "\n",
    "    completion = client.chat.completions.create(\n",
    "        model=\"qwen2-7b-instruct\",\n",
    "        messages=[{'role': 'system', 'content': prompt},\n",
    "                  {'role': 'user', 'content': query}],\n",
    "        )\n",
    "    return completion.choices[0].message.content\n",
    "\n",
    "# 测试用例\n",
    "summary_text = llm_chunking_prompt(para) \n",
    "print(summary_text)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
